Use case: program and read operations

HAL1

HAL2

The HAL NOR driver is designed to use a high-level API that abstracts the CFI commands.

The HAL NOR driver provides the user with CFI 0001, 0002, and 0003 APIs for program and read operations.

Sequence diagram

Program and read operations

  @startuml

  == Prerequisite: initialization and configuration ==
  == Process ==
  "User Application"->"HAL NOR Driver" : HAL_NOR_Program()
  note right: Program data
  alt Success or Recoverable error
     "HAL NOR Driver"-->"User Application": HAL_OK or HAL_BUSY
     note right: Return status
  else Unrecoverable error
     "HAL NOR Driver"-->"User Application": HAL_ERROR
     note right: Unrecoverable error
     "User Application"->"HAL NOR Driver" : HAL_NOR_ReturnToReadMode()
     note right: Reinitialize NOR
  end alt
  "User Application"->"HAL NOR Driver" : HAL_NOR_ReadBuffer()
  note right: Read data
  "HAL NOR Driver"-->"User Application": HAL_OK or HAL_BUSY or HAL_ERROR
  note right: Return status

  @enduml

Note

In HAL1, the program API passes the data to be written by address. In HAL2, the APIs pass the data by value because one data item is used at a time.

Code snippet

HAL1

HAL2

/* Program API */
HAL_NOR_Program(&hnor,
                (uint32_t *)NOR_StartAddress,
                &program_data
                /* --- */
               );
HAL_NOR_ReturnToReadMode(&hnor);
/* Read API */
HAL_NOR_ReadBuffer(&hnor,
                   (uint32_t *)NOR_StartAddress,
                   read_data_buffer,
                   buffer_size
                  );
/* Program API for command set ID 0001 */
HAL_NOR_CFI_0001_Program(&hnor,
                         (uint32_t *)NOR_StartAddress,
                         program_data,
                         1000 // 1000 ms
                        );
HAL_NOR_CFI_0001_Reset(&hnor);
/* Read API for command set ID 0001 */
HAL_NOR_CFI_0001_ReadArray(&hnor,
                           (uint32_t *)NOR_StartAddress,
                           read_data_buffer,
                           buffer_size
                          );

Key changes

  1. HAL2 splits most APIs by command set ID (CFI 0001/0002/0003).

  2. HAL2 uses command-set specific reset and read-array APIs (HAL_NOR_CFI_000x_Reset() and HAL_NOR_CFI_000x_ReadArray()).